Надел.отд
Главная     ◄Глагол     ◄Азбука     ◄Задачи на Глаголе     Примеры приложений ►   Среда разработки ►   Отладка программ ►   Отличия от Оберона ►   Отличия от Паскаля ►   Ассемблер ARM ►   Глагол для ARM ►   ? и Ответы
 
 glagol.png Программируем по-русски
 

Основная задача Глагола — дать человеку возможность воплощать свои мысли на языке, близком к его родному языку.

Издатель Глагола
 

 
(*~\Глагол\Отделы\Поле~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
(**)                        ОТДЕЛ Надел;
(*============================================================================* 
 * НАЗНАЧЕНИЕ: надел это область на экранном поле для ввода/вывода текстовых
 * данных. Вид Надел является основой для видимых наделов.
 * Также в данном отделе содержатся вспомогательные задачи для вывода
 * надписей с выделяемыми особым цветом буквами - буквицами.
 * При нажатии Альт-кода буквицы происходит переключение клавиатурного ввода
 * на надел, в надписи которого содержится данная буквица.
 *============================================================================*)
ИСПОЛЬЗУЕТ 
  Рамка,
  Знак   ИЗ "..\Иное\",
  ОС     ИЗ "..\Обмен\",
  ЦвЗнак ИЗ "..\Обмен\",
  Окно   ИЗ "..\Обмен\",
  Ввод   ИЗ "..\Обмен\";
ПОСТ
  (* надел может находится в следующих состояниях: *)
  сОбычный- =0; (* отображается на поле без осуществления ввода *)
  сВыбран-  =1; (* осуществляется ввод в данный надел *)
  сОтключен-=2; (* выбор данного надела невозможен *)
  (* итого *)
  Состояний-=3;

  (* признаки поведения *)
  прВыбираемый-=0; (* может выбираться человеком для ввода *)
  прГлухой-    =1; (* не воспринимает действия человека *)
  
  (* цвета ОС (место,знак), используемые для отображения наделов *)
  цОбычный-               =70X;
  цБуквицы-               =7EX;
  цОтключенный-           =78X;
  цВыбраннойКнопки-       =30X;
  цБуквицыВыбраннойКнопки-=3EX;
  цХолста-                =1BX;
  цОтметкиХолста-         =30X;
  цОтключенногоХолста-    =18X;
  цСтроки-                =3FX;
  цОтметкиСтроки-         =3BX;
  цОтключеннойСтроки-     =38X;
  цОтметкиСтрокиПамятки-  =0FX;
  цПредупреждения-        =4FX;
  цБуквицыПредупреждения- =4EX;
  
ВИД
  Доступ-=ДОСТУП К Вид;
  Задача=ЗАДАЧА(надел:Доступ; посылка+:Ввод.Посылка);
  Вид-=НАБОР(Рамка.Вид) 
    следующий-  :Доступ; (* следующий надел на поле *)
    предыдущий- :Доступ; (* предыдущий надел на поле *)
    Приём-      :Задача; (* приём и обработка посылок *)
    признаки-   :МНОЖ;   (* признаки (множество из пр...) *)
    состояние+  :ЦЕЛ;    (* текущее состояние (одно из с...) *)
    поле+       :Рамка.Доступ;    (* поле, содержащее надел *)
    цветНадписи+:ЦЕПЬ[Состояний]; (* цвет надписи в определённом состоянии *)
    цветБуквицы+:ЦЕПЬ[Состояний]; (* цвет буквицы в определённом состоянии *)
  КОН;

  Надпись-=ЦЕПЬ[64]; (* перед буквицей ставится знак "~" *)

(******************************************************************************)
ЗАДАЧА Очистить-(надел:Доступ);
(* Заполняет надел пробелом с цветом надписи текущего состояния *)
УКАЗ
  Окно.ЦветнойПробел(надел.вс,
                     надел.лк,
                     надел.нс,
                     надел.пк,
                     надел.цветНадписи[надел.состояние])
КОН Очистить;

(******************************************************************************)
ЗАДАЧА ВыводНадписи-(надел:Доступ; надпись-:Надпись; с:ЦЕЛ);
(* Цель:  отобразить надпись на заданной строке надела
 * До:    <надел>    - данный надел
 *        <надпись>  - цепочка отображаемых знаков
 *        <с>        - строка надела, на которую необходимо вывести надпись *)
ПЕР
  цвСтрока:ЦвЗнак.Строка;
  поз,к,пко:ЦЕЛ;
  знак,былЗнак:ЗНАК;
  цвет,цНадписи,цБуквицы:ЗНАК;
УКАЗ
  (* определим цвета *)
  цНадписи:=надел.цветНадписи[надел.состояние];
  цБуквицы:=надел.цветБуквицы[надел.состояние];
  (* начальные значения *)
  к:=-1;
  пко:=надел.пк - надел.лк;
  поз:=0;
  былЗнак:=0X;
  КОЛЬЦО
    ЕСЛИ поз >= РАЗМЕР(надпись) ТО ВЫХОД КОН;
    знак:=надпись[поз];
    ЕСЛИ (знак = 0X) ИЛИ (к > пко) ТО ВЫХОД КОН;
    ЕСЛИ (былЗнак = "~") И Знак.БукваЦифра(знак) ТО
      цвет:=цБуквицы
    ИНАЧЕ  
      цвет:=цНадписи;
      УВЕЛИЧИТЬ(к)
    КОН;
    ЦвЗнак.ИзЗнакаИЦвета(знак,цвет,цвСтрока[к]);
    былЗнак:=знак;
    УВЕЛИЧИТЬ(поз)
  КОН;
  Окно.ПисатьСтроку(цвСтрока,надел.вс+с,надел.лк,к+1)
КОН ВыводНадписи;

(******************************************************************************)
ЗАДАЧА СчитатьНадпись-(цепь-:ЦЕПЬ; надпись+:Надпись; длина+,буквица+:ЦЕЛ);
(* Цель:  переписать <цепь> в <надпись> и найти её длину и последнюю буквицу
 * До:    <цепь>    - исходная цепочка
 *        <надпись> - переписанная <цепь>
 * После: <длина>   - длина отображаемых знаков
 *        <буквица> - код для последней подсвеченной буквы *)
ПЕР
  поз:ЦЕЛ;
  знак,былЗнак,буква:ЗНАК;
УКАЗ
  буква:=0X;
  былЗнак:=0X;
  длина:=0;
  СПИСАТЬ(цепь,надпись);
  ОТ поз:=0 ДО ДЛИНА(надпись)-1 ВЫП
    знак:=надпись[поз];
    ЕСЛИ былЗнак = "~" ТО
      ЕСЛИ Знак.БукваЦифра(знак) ТО
        УМЕНЬШИТЬ(длина);
        буква:=знак
      КОН
    КОН;
    УВЕЛИЧИТЬ(длина);
    былЗнак:=знак
  КОН;
  буквица:=ОС.ВинЗнакВКодКлавиши(буква)
КОН СчитатьНадпись;

(******************************************************************************)
ЗАДАЧА Добавить-(наделы+,надел:Доступ);
(* Добавить <надел> в конец двусвязанного списка <наделы> *)
ПЕР
  следующий,предыдущий:Доступ;
УКАЗ
  ЕСЛИ наделы = ПУСТО ТО
    надел.следующий:=надел;
    надел.предыдущий:=надел;
    наделы:=надел
  ИНАЧЕ
    следующий:=наделы;
    предыдущий:=следующий.предыдущий;
    предыдущий.следующий:=надел;
    следующий.предыдущий:=надел;
    надел.предыдущий:=предыдущий;
    надел.следующий:=следующий
  КОН
КОН Добавить;

(******************************************************************************)
ЗАДАЧА Подготовить-(надел:Доступ; верх,лево,строк,колонок:ЦЕЛ; признаки:МНОЖ; Приём:Задача);
УКАЗ
  Рамка.Подготовить(надел,верх,лево,строк,колонок);
  надел.признаки:=признаки;
  надел.Приём:=Приём;
  надел.цветНадписи[сОбычный] :=цОбычный;
  надел.цветБуквицы[сОбычный] :=цБуквицы;
  надел.цветНадписи[сВыбран]  :=цОбычный;
  надел.цветБуквицы[сВыбран]  :=цБуквицы;
  надел.цветНадписи[сОтключен]:=цОтключенный;
  надел.цветБуквицы[сОтключен]:=цОтключенный
КОН Подготовить;
                              
КОН Надел.

 
 


Вопросы, замечания и предложения высылайте на atimopheyev@yahoo.com

 
Главная     ◄Глагол     ◄Азбука     ◄Задачи на Глаголе     Примеры приложений ►   Среда разработки ►   Отладка программ ►   Отличия от Оберона ►   Отличия от Паскаля ►   Ассемблер ARM ►   Глагол для ARM ►   ? и Ответы